from database.config import get_postgres_session, init_database
from database.models import User, KnowledgeBase, Document, DocumentSlice
from werkzeug.security import generate_password_hash
from datetime import datetime

def seed_initial_data():
    """初始化种子数据"""
    session = get_postgres_session()
    
    try:
        # 创建默认用户
        default_user = User(
            name="管理员",
            email="admin@example.com",
            password_hash=generate_password_hash("123456"),
            avatar_url="https://via.placeholder.com/100"
        )
        session.add(default_user)
        session.flush()  # 获取用户ID
        
        # 创建知识库数据 (来自HomePage的mockData)
        knowledge_bases_data = [
            {
                'id': 'kb1',
                'name': '产品文档库',
                'description': '关于我们所有产品的详细文档和指南。',
                'is_public': True,
                'doc_count': 15,
                'owner_id': default_user.id
            },
            {
                'id': 'kb2',
                'name': '开发规范',
                'description': '前端和后端开发团队的编码标准和最佳实践。',
                'is_public': False,
                'doc_count': 8,
                'owner_id': default_user.id
            },
            {
                'id': 'kb3',
                'name': '市场营销材料',
                'description': '所有市场活动、宣传册和演示文稿的集合。',
                'is_public': True,
                'doc_count': 22,
                'owner_id': default_user.id
            },
            {
                'id': 'kb4',
                'name': '人力资源政策',
                'description': '公司员工手册、福利信息和内部政策。',
                'is_public': False,
                'doc_count': 12,
                'owner_id': default_user.id
            }
        ]
        
        kb_objects = []
        for kb_data in knowledge_bases_data:
            kb = KnowledgeBase(**kb_data)
            session.add(kb)
            kb_objects.append(kb)
        
        session.flush()
        
        # 创建文档数据 (来自KnowledgeBasePage的mockDocs)
        documents_data = [
            {
                'id': 'doc1',
                'title': '欢迎来到产品文档库',
                'type': 'guide',
                'status': 'published',
                'content': '这是产品文档库的欢迎文档，包含了关于如何使用和管理产品文档的详细说明。',
                'file_type': 'PDF',
                'file_size': '1.2 MB',
                'page_count': 5,
                'knowledge_base_id': 'kb1',
                'author_id': default_user.id
            },
            {
                'id': 'doc2',
                'title': '快速入门指南',
                'type': 'tutorial',
                'status': 'published',
                'content': '快速入门指南帮助新用户快速上手我们的产品和服务。',
                'file_type': 'PDF',
                'file_size': '800 KB',
                'page_count': 3,
                'knowledge_base_id': 'kb1',
                'author_id': default_user.id
            },
            {
                'id': 'doc3',
                'title': 'API 参考文档',
                'type': 'reference',
                'status': 'draft',
                'content': 'API参考文档提供了所有可用API端点的详细说明和示例。',
                'file_type': 'PDF',
                'file_size': '2.1 MB',
                'page_count': 15,
                'knowledge_base_id': 'kb1',
                'author_id': default_user.id
            },
            {
                'id': 'doc4',
                'title': '常见问题解答 (FAQ)',
                'type': 'faq',
                'status': 'published',
                'content': '收集了用户最常遇到的问题和相应的解答。',
                'file_type': 'PDF',
                'file_size': '600 KB',
                'page_count': 4,
                'knowledge_base_id': 'kb1',
                'author_id': default_user.id
            },
            {
                'id': 'doc5',
                'title': '产品规格说明',
                'type': 'specification',
                'status': 'published',
                'content': '详细的产品技术规格和配置要求说明。',
                'file_type': 'PDF',
                'file_size': '1.5 MB',
                'page_count': 8,
                'knowledge_base_id': 'kb1',
                'author_id': default_user.id
            },
            {
                'id': 'doc6',
                'title': '用户手册',
                'type': 'manual',
                'status': 'published',
                'content': '完整的用户操作手册，涵盖所有功能模块。',
                'file_type': 'PDF',
                'file_size': '3.2 MB',
                'page_count': 20,
                'knowledge_base_id': 'kb1',
                'author_id': default_user.id
            },
            {
                'id': 'doc7',
                'title': '系统架构概述',
                'type': 'architecture',
                'status': 'draft',
                'content': '系统整体架构设计和技术选型说明。',
                'file_type': 'PDF',
                'file_size': '1.8 MB',
                'page_count': 12,
                'knowledge_base_id': 'kb2',
                'author_id': default_user.id
            },
            {
                'id': 'doc8',
                'title': '开发者指南',
                'type': 'guide',
                'status': 'published',
                'content': '面向开发者的详细开发指南和最佳实践。',
                'file_type': 'PDF',
                'file_size': '2.5 MB',
                'page_count': 18,
                'knowledge_base_id': 'kb2',
                'author_id': default_user.id
            }
        ]
        
        doc_objects = []
        for doc_data in documents_data:
            doc = Document(**doc_data)
            session.add(doc)
            doc_objects.append(doc)
        
        session.flush()
        
        # 创建文档切片数据 (来自DocumentDetailPage的mockSlices)
        slices_data = [
            {
                'id': 'slice1',
                'document_id': 'doc1',
                'question': '什么是知识库系统？',
                'answer': '知识库系统是一种集中存储、管理和检索组织知识的平台。它允许用户上传、分类和搜索各种文档和信息资源，从而促进知识共享和协作。',
                'slice_index': 0
            },
            {
                'id': 'slice2',
                'document_id': 'doc1',
                'question': '如何创建新的知识库？',
                'answer': '要创建新的知识库，请点击首页上的"创建新知识库"按钮，然后填写知识库名称和描述。完成后点击"创建知识库"按钮即可。',
                'slice_index': 1
            },
            {
                'id': 'slice3',
                'document_id': 'doc1',
                'question': '如何上传文档到知识库？',
                'answer': '进入特定知识库后，点击"上传文档"按钮。然后，您可以拖放文件或点击选择文件。选择文件后，您可以启用QA提取和索引增强功能，然后点击"开始上传"。',
                'slice_index': 2
            },
            {
                'id': 'slice4',
                'document_id': 'doc1',
                'question': '什么是QA提取功能？',
                'answer': 'QA提取是一种AI功能，它会分析上传的文档内容，自动生成相关的问题和答案对。这些QA对可以帮助用户更快地理解文档内容，并提高搜索相关性。',
                'slice_index': 3
            },
            {
                'id': 'slice5',
                'document_id': 'doc1',
                'question': '什么是索引增强？',
                'answer': '索引增强是一种优化文档搜索的技术。它通过分析文档内容，提取关键词和概念，并建立更丰富的索引，从而提高搜索结果的准确性和相关性。',
                'slice_index': 4
            },
            {
                'id': 'slice6',
                'document_id': 'doc1',
                'question': '如何编辑已上传的文档？',
                'answer': '在知识库文档列表中，找到您想要编辑的文档，然后点击操作列中的编辑图标（铅笔图标）。在编辑页面，您可以修改文档标题或重新上传文档文件。',
                'slice_index': 5
            },
            {
                'id': 'slice7',
                'document_id': 'doc1',
                'question': '如何删除文档？',
                'answer': '在知识库文档列表中，找到您想要删除的文档，然后点击操作列中的删除图标（垃圾桶图标）。系统会要求您确认删除操作。确认后，文档将被永久删除。',
                'slice_index': 6
            }
        ]
        
        for slice_data in slices_data:
            slice_obj = DocumentSlice(**slice_data)
            session.add(slice_obj)
        
        session.commit()
        print("种子数据初始化完成！")
        print(f"创建了 {len(knowledge_bases_data)} 个知识库")
        print(f"创建了 {len(documents_data)} 个文档")
        print(f"创建了 {len(slices_data)} 个文档切片")
        
    except Exception as e:
        session.rollback()
        print(f"数据初始化失败: {e}")
        raise
    finally:
        session.close()

if __name__ == "__main__":
    init_database()
    seed_initial_data()
